考虑这个服务函数,它检索单个任务并将结果包装在一个承诺中。
get(id: string): Promise<Task> {
return new Promise((resolve, reject) => {
this.tasks.findOne({_id: id}).exec(function (err, doc) {
console.log("Getting task: ", doc);
if (err)
reject(err);
else
resolve(<Task>doc);
});
});
}
Run Code Online (Sandbox Code Playgroud)
我为 get 函数编写了这个单元测试:
beforeEach(() => {
const injector = TestBed.configureTestingModule({
providers: [TaskService, Logger]
});
subject = injector.get(TaskService);
var Datastore = require('nedb');
db = new Datastore({filename: 'test'});
subject.setDBConnection(db);
task = new Task();
task.title = 'Test Task';
task._id = "TEST";
db.loadDatabase();
db.insert(task);
});
it('returns existing record', fakeAsync(() => {
let r = null;
subject.get('TEST').then((doc) …Run Code Online (Sandbox Code Playgroud) 启动 rails 服务器时收到以下错误消息:
您的包被锁定为 rake (12.0.0),但是在您的 Gemfile 中列出的任何源中都找不到该版本。如果您没有更改源代码,则意味着 rake (12.0.0) 的作者已将其删除。您需要将您的捆绑包更新到尚未删除的其他版本的 rake (12.0.0) 才能安装。
我gem 'rake', '12.0.0'在 gemfile 中指定,但这并没有解决它。我试过bundle update rake,删除Gemfile.lock并用bundle exec bundle install. 我还在我的命令前加上了 `bundle exec1,它什么都不做。
我的 Gemfile.lock 已经指定了 rake 版本 12.0.0,没有安装其他版本。
查看我的 gemfile:http ://pastebin.com/L4tVFWz9
和 rakefile:http ://pastebin.com/K7p2ajsE
我尝试了已经激活的 rake 版本中建议的解决方案,与 Gemfile 需要的不同,以防止 rake 命令
比方说,我有一个模型,狗和狗的每一个正好有2猫“敌人”,enemy1而且enemy2,我怎么写迁移文件,这样我可以调用dog.enemy1来检索第一个敌人并dog.enemy2检索第二个敌人?我试过这个:
create_table :dog do |t|
t.string :name
t.timestamps null: false
end
add_index :dog, :name
add_foreign_key :dogs, :cats, column: :enemy1_id
add_foreign_key :dogs, :cats, column: :enemy2_id
end
Run Code Online (Sandbox Code Playgroud)
我也用该t.references方法尝试过,但无法让它工作。一直在研究这个问题几个小时。它在开发中运行良好,但不适用于 Heroku Postgres。我得到的错误是
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:column "enemy1_id" referenced in foreign key constraint does not exist.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
postgresql activerecord ruby-on-rails heroku ruby-on-rails-4